-- @Author: baidwwy
-- @Date:   2018-06-05 07:42:01
-- @Last Modified by:   baidwwy
-- @Last Modified time: 2018-08-13 19:27:48
local gusb = require("gsub")

local 聊天框 = {}
local 渲染区,宽度,x,y,_x,_y
local 计次 = 0
function 聊天框.打开(w,标题)
    宽度 = w or 320
    gusb.Create(引擎.取窗口句柄(),引擎.宽度,引擎.高度,宽度,标题)
    渲染区   = require("gge纹理类")():渲染目标(引擎.宽度,引擎.高度)
    if 聊天框.消息事件 then
        聊天框.消息事件('宽度变更',宽度)
    end
end
function 聊天框.关闭()
    gusb.Release()
    渲染区 = nil
end
function 聊天框.是否打开()
    return 渲染区
end
function 聊天框.更新()
    if 聊天框.消息事件 then
        x,y = 聊天框.取鼠标坐标()
        if _x~=x or _y~=y then
            _x,_y = x,y
            聊天框.消息事件('鼠标移动',x,y)
        end
        if 聊天框.鼠标按下(KEY.LBUTTON) then
            聊天框.消息事件('左键按下',x,y)
        end
        if 聊天框.鼠标弹起(KEY.LBUTTON) then
            聊天框.消息事件('左键弹起',x,y)
        end
        if 聊天框.鼠标按下(KEY.RBUTTON) then
            聊天框.消息事件('右键按下',x,y)
        end
        if 聊天框.鼠标弹起(KEY.RBUTTON) then
            聊天框.消息事件('右键弹起',x,y)
        end
        local w=聊天框.取鼠标滚轮()
        if w and w~= 0   then
            聊天框.消息事件('鼠标滚轮',w,x,y)
        end
        gusb.ClearQueue()
    end
end
function 聊天框.渲染开始()
    if 渲染区 then
        if 计次==6 then--减少帧数
            计次 = 0
        else
            计次 = 计次+1
            return false
        end
        if 引擎.渲染开始(渲染区) then
            引擎.渲染清除()
            return true
        end
    end
end

function 聊天框.渲染结束()
    引擎.渲染结束()
    local w = gusb.Update(渲染区:锁定())
    if 聊天框.消息事件 and 宽度~=w then
        宽度=w
        聊天框.消息事件('宽度变更',宽度)
    end
    渲染区:解锁()
    gusb.Rende()
end

function 聊天框.取鼠标坐标()
    return gusb.GetMousePos()
end
function 聊天框.取鼠标滚轮()
    return gusb.GetMouseWheel()
end
function 聊天框.鼠标按下(key)
    return gusb.KeyDown(key+1)
end
function 聊天框.鼠标弹起(key)
    return gusb.KeyUp(key+1)
end
function 聊天框.是否在窗口内()
    return gusb.IsMouseOver()
end
function 聊天框.按键按下(key)
    return gusb.KeyDown(key)
end
function 聊天框.按键弹起(key)
    return gusb.KeyUp(key)
end
function 聊天框.取按键状态(key)
    return gusb.GetKeyState(key)
end
function 聊天框.取按下键值()
    return gusb.GetKey()
end
return 聊天框
